Vagrant 是使用命令行即可方便管理的虚拟机, 底层使用 virtualbox 或者 VMWare, 支持在 Windows, macOS 和 Linux 多种系统.
使用 Vagrantfile 实现统一配置, 可以用 Shared Folder 与主机直接进行文件系统映射, 使用 Provisioning Script 实现运行环境的快速建立.
安装
Vagrant
进入 Vagrant 官网 下载对应系统的安装文件.
安装方法参考: https://www.vagrantup.com/docs/installation/
Windows 和 MacOS 都是双击后下一步直到完成, CentOS 是 rpm -ivh xxx.rpm
按提示输入选项确认.
PS: Windows 10 安装可能会出现 Hyper-V 的问题, 参考另一篇文章.
Virtual Box
选择对应的安装系统, Windows 和 MacOS 仍然是双击后下一步, Linux 不同发行版本有各自的安装方法.
配置虚拟环境
- VirtualBox 镜像存储位置
VirtualBox - 管理 - 全局设置 - 常规 - 默认虚拟电脑位置 - (选择一个空间大的盘符)
- Vagrant 镜像存储位置
配置环境变量 VAGRANT_HOME
.
默认 Windows 是 C:\USERNAME\.vagrant.d
, Mac 是 /Users/USERNAME/.vagrant.d
Windows 修改环境变量方法
MacOS 和 Linux 用户在 ~/.bashrc 里面指定 export VAGRANT_HOME='/data/.vagrant.d'
Vagrant 管理命令
Vagrant 镜像管理
- 查看当前本机镜像
vagrant box list
- 删除镜像
vagrant box remove BOX_NAME
- 添加 box 到本地仓库:
vagrant box add BOX_NAME [URL/FILE]
Vagrant 初始化虚拟机 - 创建 Vagrantfile
- 创建 Vagrantfile:
vagrant init [BOX_NAME/URL]
- 校验 Vagrantfile:
vagrant validate
Vagrant 虚拟机的管理
初始化
- provision 准备虚拟机依赖环境
- up 准备虚拟机依赖环境, 并且初始化启动
基本操作
- status 展示当前 Vagrantfile 对应的虚拟机信息
- suspend 暂停虚拟机
- resume 恢复暂停的虚拟机
- reload 重启虚拟机, 重新加载 Vagrantfile 配置
- halt 关闭虚拟机
- destroy 关闭虚拟机, 并且删除所有相关文件信息
连接
- powershell 使用 powershell 连接虚拟机
- rdp 使用 RDP 连接虚拟机
- ssh 使用 SSH 连接虚拟机
管理
- global-status 展示当前用户下所有虚拟机信息
- package 将当前运行的虚拟机打包成镜像
- snapshot 管理快照: 保存, 回滚…
其他操作
- plugin : manages plugins: install, uninstall, update, etc.
- port : displays information about guest port mappings
- push : deploys code in this environment to a configured destination
- ssh-config : outputs OpenSSH valid configuration to connect to the machine
- upload : upload to machine via communicator
虚拟机创建实战
创建, 启动, 登录, 开关机, 查看状态, 销毁
- 初始化:
vagrant init CentOS/7
, 生成 vagrantfile 文件, 定义依赖 box 为CentOS/7
- 启动虚拟机:
vagrant up
, 这时候因为本地没有CentOS/7
的镜像, 会从网上下载. - 正常启动后, 打开 Virtual Box 可以看到已经出现了一个正在运行的虚拟机.
- 在当前文件夹下, 可以看到
.vagrant
文件夹, 里面存放着虚拟机文件. - 命令行查看当前虚拟机状态:
vagrant status
- 命令行链接到虚拟机:
vagrant ssh MACHINE_NAME
, vagrant 和 root 账号的密码都为 vagrant. - 尝试挂起, 关机, 重启:
vagrant suspend
,vagrant halt
,vagrant reload
. - 查看虚拟机状态:
vagrant global-status
- 销毁虚拟机:
vagrant destroy MACHINE_NAME
, 虚拟机中的一切将被删除, 慎用.
快照管理
- 创建快照
vagrant snapshot save SNAPSHOT_NAME
- 查看快照
vagrant snapshot list
- 恢复到指定快照
vagrant snapshot restore SNAPSHOT_NAME
- 删除快照
vagrant snapshot delete SNAPSHOT_NAME
与主机共享文件
共享文件的配置, 需要更改 Vagrantfile 后重启.
1 | config.vm.synced_folder |
网络配置
支持三种网络配置: 端口转发(默认)、私有网络、公有网络
端口转发(forwarded ports)
- 定义: 虚拟机端口与主机端口一一映射, 访问主机端口则转发到虚拟机端口, 和 docker 的 port 一样.
- 有点: 容易实现局域网可访问的虚拟机
- 缺点: 一对一映射配置麻烦, 不支持在宿主机使用小于 1024 的端口来转发.
1 | Vagrant.configure("2") do |config| |
若 guest_ip
和 host_ip
两项配置为空, 则局域网下的所有设备都可以访问该虚拟机.
私有网络(private networks)
- 定义: 宿主机可访问, 同在一个网段的多个虚拟机可以访问.
- 有点: 安全
- 缺点: 局域网无法使用
1 | Vagrant.configure("2") do |config| |
公有网络(public networks)
- 定义: 公有网络是指设置虚拟机和宿主机有相同的网络配置
- 优点: 局域网可用
- 缺点: 只有有网络情况下可访问
1 | Vagrant.configure("2") do |config| |
文章全部内容参考: https://blog.csdn.net/zsl10/article/details/52045979